package com.example.jnademo;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * @author: zehao.song
 */
//继承Library，用于加载库文件
public interface Clibrary2 extends Library {

    // 调用linux下面的so文件,注意，这里只要写test就可以了，不要写libtest，也不要加后缀
//    Clibrary INSTANCE = (Clibrary) Native.loadLibrary("test", Clibrary.class);
    // [Native.synchronizedLibrary] 阻止多线程同时访问本地代码
    String os = System.getProperty("os.name");  // 获取当前操作系统的类型
    int beginIndex = os != null && os.startsWith("Windows") ? 1 : 0;// windows操作系统为1 否则为0

    Clibrary2 INSTANCE = (Clibrary2) Native.synchronizedLibrary(
            (Clibrary2) Native.loadLibrary(
                    Clibrary2.class.getResource("/libpir_client_lib.so")
                            .getPath()
                            .substring(beginIndex)
                    , Clibrary2.class
            )
    );

    /**
     * 此方法为so库中的c语言函数
     * <pre>
     * {@code
     * const char* query(
     *     uint32_t type, 查询类型. 0--查询请求, 1--查看帮助信息
     *     const char* host,
     *     uint32_t port,
     *     const char* merchant_no,
     *     const char* private_key,
     *     uint32_t service_id,
     *     const char* search_data
     * );
     * }
     * </pre>
     */
    String query(int type,
                 String host,
                 int port,
                 String merchant_no,
                 String private_key,
                 int service_id,
                 String search_data);

}
